【发布时间】:2015-05-18 08:42:24
【问题描述】:
场景
我想设计表格来保存牛和小牛的数据。
牛和小牛共有的属性/列
- 价格
- 出生日期 等(一些来自 FK 以及 Breed 等)
为小牛保留的属性
- 父亲
- 妈妈
为 CATTLE(女性)保留的属性
IsMilking(是或否)
InseminationDate(当然,一头奶牛可以多次受精,因此必须对其进行标准化,并且应该有一个新表:ID(使用 CATTLE 表的 PK 的 FK)和 InsemDate - 但它应该存在仅限女性)
Status 的特殊属性 CATTLE 具有以下属性:
男女通用:{健康、生病}
仅限女性:{孕妇、小母牛等}
由于这种无能的设计,我的整个软件都失败了。我现有的设计如下:
现有设计
有一个 CATTLE 表,它引用所有 STATUS、BREED 等表,因为它是 FK。
有一个包含这些列的 CALF 表:
ID (FK from CATTLE table) - Having cattle and calf in same table is apparently failing
FatherID (FK from CATTLE table) - Again we can have Calfs themselves as Father in this column
MotherID (FK from CATTLE table) - Same issue
提前致谢。我已经尽了最大的努力。为 MALE 和 FEMALE 拆分表(但它需要继承,我还必须拆分所有后续表,如 STATUS 表等)。
【问题讨论】:
-
一条指示“未知父母”的记录将允许您将所有动物放在同一个表中。
-
它的设计呢?你的意思是 Calf_Father 和 Mother 列也应该在动物表中吗?
-
我不是农民,但牛犊不宰杀不就变成牛(牛、牛、牛)吗?您为什么不想为所有动物存储有关父母的信息 - 追踪血统的能力不是在所有情况下都很重要,而不仅仅是对孩子吗?
-
@jpw 哈哈。这很重要,但实际上购买了许多动物,因此没有祖先的下落。是的,小牛会在一段时间后(我估计是 18 个月)转为 CATTLE 状态
-
@TalhaIrfan 啊,我明白了。这是有道理的。
标签: sql sql-server database database-design