我是学生,我有一个关于数据库模式的问题,我已经创建了实体关系图[ERD],在这一步我应该做数据库模式,我数据库中的所有实体都必须有它们之间的关系其他实体?即:每个实体应该在它之前有一个实体的外键,因为我可以创建所有表,只有2个表可以有它们之间的关系,我使用我要创建的C#程序控制其他表。
**在我的ERD中,所有实体之间都有相互关系。
答案 0 :(得分:2)
...我的数据库中的所有实体都必须具有它们之间的关系 其他实体?
没有。实体当然可以独立存在。虽然在实践中如果你发现自己的关系很少,你可能会做错事......
你说只有两张桌子可以有关系,但我会说它是一种关系只能有两个参与者;表肯定不仅仅涉及另一个表。
答案 1 :(得分:1)
如果表中的信息之间存在关系,那么每当您在数据库中创建表时,您应该创建一个关系,以确保在将数据输入表时,参考数据将存在于那里。这将强制参照完整性。例如:
员工数据库:
EmployeeInfoTable:
pk EmployeeID
EmployeeName
EmployeeDateHired
fk SalaryID
EmployeeLoginTable
pk LoginID
fk EmployeeID
Username
Password
SalaryTable
pk SalaryID
SalaryRange
所以这样做是为了确保如果你向员工添加薪水,它必须存在于Salary表中,如果你添加了登录,那么你必须要有一个员工来引用。它只是一个额外的安全层,以确保输入到数据库中的数据是有效的并且可以使用。
虽然您可以通过C#或您想要的任何编程语言在技术上控制它,但很容易忘记这些小规则,尤其是在具有200个或更多表的数据库中。因此养成使用关系和保持参照完整性的习惯是一件非常好的事情。
答案 2 :(得分:0)
由于约定,主键应始终为id
,并且您的外键可以被称为othertablename_id
,因此如果表具有指向所有其他表的链接,则每个表都需要一个键那些。
例如:如果dogs
拥有多个所有者,但owners
只能拥有一只狗,则dog_id
表中只能有owner
。但是你必须查询owners
表来找到一只狗的所有者。
如果狗有多个拥有者并且拥有者可以拥有多只狗,那么您必须拥有一个名为dogs_owners
的联接表,其ID为外键dog_id
和owner_id
当然,您可以根据需要为表格和字段命名,但使用id
和_id
是的,除了您的实体之间存在多对多关系时,实体通常仅等同于一个表。
答案 3 :(得分:0)
所有实体都不需要彼此建立关系。如果一个实体以某种方式与另一个实体相关,则只有ERD中的两个实体之间存在关系。
创建表的一般经验法则是: