SQL数据库:关系和;模式

SQL数据库:关系和;模式,sql,database,schema,relational-database,Sql,Database,Schema,Relational Database,我是一名学生,我对数据库模式有一个问题,我已经创建了实体关系图[ERD],在这一步中,我应该做数据库模式,我的数据库上的所有实体必须在它们和其他实体之间有关系吗?i、 e:每个实体前面都应该有一个实体的外键,因为我可以创建所有表,只有两个表可以在它们之间建立关系,我使用我要创建的C#程序控制其他表 **在我的ERD中,所有实体之间都有关系 …我数据库中的所有实体都必须与 其他实体 不,实体当然可以独立存在。虽然在实践中,如果你发现你很少有关系,你可能是做错了什么 你说得有点对,只有两个表可以有一

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

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

…我数据库中的所有实体都必须与 其他实体

不,实体当然可以独立存在。虽然在实践中,如果你发现你很少有关系,你可能是做错了什么

你说得有点对,只有两个表可以有一个关系,但我认为关系只能有两个参与者;表当然可以与多个其他表关联

…我数据库中的所有实体都必须与 其他实体

不,实体当然可以独立存在。虽然在实践中,如果你发现你很少有关系,你可能是做错了什么


你说得有点对,只有两个表可以有一个关系,但我认为关系只能有两个参与者;表当然可以不仅仅与一个其他表相关。

根据惯例,主键应该始终是
id
,外键可以称为
othertablename\u id
,因此,如果一个表与所有其他表都有链接,则需要为其中每一个表指定一个键

例如:如果
dogs
有多个主人,但
owners
只能有一只狗,那么您可以在
owner
表中只拥有
dog\u id
。但是,您必须查询
所有者
表才能找到一只狗的所有所有者

如果狗有一个以上的主人,而主人可以有一个以上的狗,那么你必须有一个名为
dogs\u owners
的连接表,其中包含id和外键
dog\u id
owner\u id

当然,您可以根据需要为表和字段命名,但通常使用
id
\u id


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

根据惯例,主键应始终为
id
,您的外键可以被称为
othertablename\u id
,因此,如果一个表有一个指向所有其他表的链接,那么它需要为其中的每一个表指定一个键

例如:如果
dogs
有多个主人,但
owners
只能有一只狗,那么您可以在
owner
表中只拥有
dog\u id
。但是,您必须查询
所有者
表才能找到一只狗的所有所有者

如果狗有一个以上的主人,而主人可以有一个以上的狗,那么你必须有一个名为
dogs\u owners
的连接表,其中包含id和外键
dog\u id
owner\u id

当然,您可以根据需要为表和字段命名,但通常使用
id
\u id


是的,除了实体之间存在多对多关系外,一个实体通常只相当于一个表。

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

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

  • ERD中的每个实体都有一个表
  • 对于ERD中的一对多关系,多边表将包含单边表的外键
  • 对于多对多关系SIP,该关系将有一个单独的表,其中包含两个实体表的外键
  • 如果关系具有属性,则该关系将有一个单独的表,其中包含两个实体表的外键

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

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

  • ERD中的每个实体都有一个表
  • 对于ERD中的一对多关系,多边表将包含单边表的外键
  • 对于多对多关系SIP,该关系将有一个单独的表,其中包含两个实体表的外键
  • 如果关系具有属性,则该关系将有一个单独的表,其中包含两个实体表的外键

  • 任何时候在数据库中创建表时,如果表中的信息之间存在关系,则应创建关系,以确保在将数据输入到表中时,引用数据将在其中。这将强制引用完整性。例如:

    员工数据库:

    EmployeeInfoTable:
       pk EmployeeID
          EmployeeName
          EmployeeDateHired
       fk SalaryID
    
    EmployeeLoginTable
       pk LoginID
       fk EmployeeID
          Username
          Password
    
    SalaryTable
       pk SalaryID
          SalaryRange
    
    因此,这样做的目的是确保如果您向员工添加工资,那么它必须存在于工资表中,如果您添加了登录名,那么您必须有一名员工作为参考。它只是增加了一层安全性,以确保输入到数据库中的数据有效且可以使用

    虽然从技术上讲,您可以使用C#或任何您想要的编程语言来控制这一点,但很容易忘记这些小规则,尤其是在拥有200个或更多表的数据库中。因此,养成使用关系和保持引用完整性的习惯是一件非常好的事情。

    无论何时创建ta