SQL数据库:关系&模式

时间:2011-12-08 14:52:19

标签: sql database schema relational-database

我是学生,我有一个关于数据库模式的问题,我已经创建了实体关系图[ERD],在这一步我应该做数据库模式,我数据库中的所有实体都必须有它们之间的关系其他实体?即:每个实体应该在它之前有一个实体的外键,因为我可以创建所有表,只有2个表可以有它们之间的关系,我使用我要创建的C#程序控制其他表。

**在我的ERD中,所有实体之间都有相互关系。

4 个答案:

答案 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_idowner_id

当然,您可以根据需要为表格和字段命名,但使用id_id

是惯例

是的,除了您的实体之间存在多对多关系时,实体通常仅等同于一个表。

答案 3 :(得分:0)

所有实体都不需要彼此建立关系。如果一个实体以某种方式与另一个实体相关,则只有ERD中的两个实体之间存在关系。

创建表的一般经验法则是:

  1. ERD中的每个实体都有一个表格
  2. 对于ERD中的一对多关系,许多边表将包含单边表的外键
  3. 对于多对多关系,将有一个单独的表,用于包含实体表的外键的关系
  4. 如果某个关系具有某个属性,则该关系将有一个单独的表,该表将包含两个实体表的外键