作为家庭作业的一部分,我被要求根据案例研究创建表格,并且所有表格都必须采用 3NF。然而,我已经尝试并尝试理解 3NF,但我只是没有掌握它的窍门,希望得到一些帮助。
案例研究的要求是针对 vert 诊所的:
不需要:记录所有销售额
到目前为止,我有以下表格:
工作人员:
| staff_ID | firstName | lastName | gender | address_ID | contactNumber | partTimeOrFullTime | salary |
员工地址表:
| address_ID | staff_ID | number | street | city | county | postalCode |
vert 表:
| staff_ID | appointment_ID |
vert 护士:
| staff_ID | appointment_ID |
约会表:
| appointment_ID | customer_ID | staff_ID | patient_ID | date | time |
初始约会表:
| appointment_ID | customer_ID | patient_ID | diagnosis | treatment |
后续约会:
| appointment_ID | customer_ID | patient_ID | diagnosis | treatment |
患者:
| patient_ID | customer_ID | animal_type | gender | weight | height | previous_Appointments | previous_Treatment |
产品:
| product_ID | name | product_Category | animal | price | quantity_Available | reOrder_Level |
product_sold:
| sale_ID | product_ID | sale_Date |
供应商:
| supplier_ID | product_ID | contactNumber | email |
供应商地址:
| supplierAddress_ID | supplier_ID | doorNumber | street | city | town | postalCode |
库存:
| name | product_ID | quantity_Available | price |
谢谢!
最佳答案
我不会给你一个确切的答案,原因有两个:1) 我懒得过滤所有的文本。在那里,我说了。 2) 你不会学到任何东西。
第三范式是关于没有传递函数依赖的。换句话说,如果 A 决定 B,B 不决定 A,B 决定 C,则存在传递依赖,因此 B 和 C 可以放入它们自己的表中。
您的集合中的一个示例可以是包含城市、州和邮政编码的表格。在现实世界中,邮政编码可用于确定城市和州。也许您可以有一个单独的表,以邮政编码作为键,城市和州是另外两个属性。这可能是一个传递依赖性,因为地址 ID -> 邮政编码和邮政编码 -> 城市,正如我所说的州。
另一件需要记住的重要事情:如果任何事实出现两次,您可以进一步规范化。例如,[city A, State B, ZipCode C] 可能会出现多次,因为我确定您有多个人来自同一地区。
编辑 仔细查看并编辑后,我发现了很多要评论的东西,但由于这是一项作业,我会给你时间考虑它,并在几天或更长时间后回来再次检查它,如果你还是很好奇。
编辑 2
我会逐表给你建议,但会尽量将这些限制在正确的方向上。
staff - 没有任何传递依赖关系让我跳出来,里面的一切都由主键决定,这很好。
staff_address - 为什么有 staff_id 列?这不是一个好主意。此外 - 正如我已经提到的,您对地址具有传递依赖性。
vet 和 vet_nurse - 这些表具有完全相同的列,那么为什么有两个表?当然,您可以使用一种方法。
预约表 - 初始预约和跟进具有相同的列。同样,应该有一种方法可以使它们合二为一。我会给你一个约会表的直接建议:将日期和时间作为一列,aptDate,并赋予它 DATETIME 值类型。
patient - customer_ID 值在 patient 表中,那么为什么要在其他表中呢?此外,以前的约会和以前的治疗将很难在数据库中追踪。您应该会在开始输入数据后立即看到它。
product - 目前看来还不错,但有些问题我稍后会讨论。
product_sold - sale_ID 是否唯一?如果是,一次销售可以销售多少产品?这张表肯定没有规范化好。
supplier - 一个供应商可以有多少产品?这是关于如何更改产品表的提示。
suppliers_address - 这里的 postalCode 也有同样的问题。另外,为什么 suppliers_address 指向供应商?
inventory - 您是否已经在产品表中跟踪所有这些字段(价格除外)?
这些是我看到的潜在问题,但出于良心我不能为您的作业提供解决方案。但是,如果这是您对规范化数据库的首次尝试之一,那一点也不差。
关于mysql - 如何将这些表规范化为 3NF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26781931/
我正在学习如何使用Nokogiri,根据这段代码我遇到了一些问题:require'rubygems'require'mechanize'post_agent=WWW::Mechanize.newpost_page=post_agent.get('http://www.vbulletin.org/forum/showthread.php?t=230708')puts"\nabsolutepathwithtbodygivesnil"putspost_page.parser.xpath('/html/body/div/div/div/div/div/table/tbody/tr/td/div
总的来说,我对ruby还比较陌生,我正在为我正在创建的对象编写一些rspec测试用例。许多测试用例都非常基础,我只是想确保正确填充和返回值。我想知道是否有办法使用循环结构来执行此操作。不必为我要测试的每个方法都设置一个assertEquals。例如:describeitem,"TestingtheItem"doit"willhaveanullvaluetostart"doitem=Item.new#HereIcoulddotheitem.name.shouldbe_nil#thenIcoulddoitem.category.shouldbe_nilendend但我想要一些方法来使用
关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭4年前。Improvethisquestion我想在固定时间创建一系列低音和高音调的哔哔声。例如:在150毫秒时发出高音调的蜂鸣声在151毫秒时发出低音调的蜂鸣声200毫秒时发出低音调的蜂鸣声250毫秒的高音调蜂鸣声有没有办法在Ruby或Python中做到这一点?我真的不在乎输出编码是什么(.wav、.mp3、.ogg等等),但我确实想创建一个输出文件。
给定这段代码defcreate@upgrades=User.update_all(["role=?","upgraded"],:id=>params[:upgrade])redirect_toadmin_upgrades_path,:notice=>"Successfullyupgradeduser."end我如何在该操作中实际验证它们是否已保存或未重定向到适当的页面和消息? 最佳答案 在Rails3中,update_all不返回任何有意义的信息,除了已更新的记录数(这可能取决于您的DBMS是否返回该信息)。http://ar.ru
我在我的项目目录中完成了compasscreate.和compassinitrails。几个问题:我已将我的.sass文件放在public/stylesheets中。这是放置它们的正确位置吗?当我运行compasswatch时,它不会自动编译这些.sass文件。我必须手动指定文件:compasswatchpublic/stylesheets/myfile.sass等。如何让它自动运行?文件ie.css、print.css和screen.css已放在stylesheets/compiled。如何在编译后不让它们重新出现的情况下删除它们?我自己编译的.sass文件编译成compiled/t
我正在寻找执行以下操作的正确语法(在Perl、Shell或Ruby中):#variabletoaccessthedatalinesappendedasafileEND_OF_SCRIPT_MARKERrawdatastartshereanditcontinues. 最佳答案 Perl用__DATA__做这个:#!/usr/bin/perlusestrict;usewarnings;while(){print;}__DATA__Texttoprintgoeshere 关于ruby-如何将脚
Rackup通过Rack的默认处理程序成功运行任何Rack应用程序。例如:classRackAppdefcall(environment)['200',{'Content-Type'=>'text/html'},["Helloworld"]]endendrunRackApp.new但是当最后一行更改为使用Rack的内置CGI处理程序时,rackup给出“NoMethodErrorat/undefinedmethod`call'fornil:NilClass”:Rack::Handler::CGI.runRackApp.newRack的其他内置处理程序也提出了同样的反对意见。例如Rack
在选择我想要运行操作的频率时,唯一的选项是“每天”、“每小时”和“每10分钟”。谢谢!我想为我的Rails3.1应用程序运行调度程序。 最佳答案 这不是一个优雅的解决方案,但您可以安排它每天运行,并在实际开始工作之前检查日期是否为当月的第一天。 关于ruby-如何每月在Heroku运行一次Scheduler插件?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/8692687/
我有一个对象has_many应呈现为xml的子对象。这不是问题。我的问题是我创建了一个Hash包含此数据,就像解析器需要它一样。但是rails自动将整个文件包含在.........我需要摆脱type="array"和我该如何处理?我没有在文档中找到任何内容。 最佳答案 我遇到了同样的问题;这是我的XML:我在用这个:entries.to_xml将散列数据转换为XML,但这会将条目的数据包装到中所以我修改了:entries.to_xml(root:"Contacts")但这仍然将转换后的XML包装在“联系人”中,将我的XML代码修改为
我有一大串格式化数据(例如JSON),我想使用Psychinruby同时保留格式转储到YAML。基本上,我希望JSON使用literalstyle出现在YAML中:---json:|{"page":1,"results":["item","another"],"total_pages":0}但是,当我使用YAML.dump时,它不使用文字样式。我得到这样的东西:---json:!"{\n\"page\":1,\n\"results\":[\n\"item\",\"another\"\n],\n\"total_pages\":0\n}\n"我如何告诉Psych以想要的样式转储标量?解