数据库设计的几点建议:
1. 表必须拥有标识符。这是基本规则,每个表应该拥有唯一的行标识符,以及可让表的记录和记录间有所区别的列或列的集合。每个表都应该拥有一个标识符列,而且每条记录的标识符的值都是唯一的,此行标识符称为主键。
2. 表应该只存储单一实例类型的数据。若在表中存储太多信息,可能导致无法对数据库进行有效、可靠的管理。举例来说,在SQL Server2005的范例数据库AdventureWorks中,销售订单和客户信息存储在单独的表中。若将销售订单和客户信息放在同一表中,这种设计可能会导致一些问题。例如,每笔销售订单可能需要重复加入和存储客户信息(姓名和地址),这需要使用额外的数据库存储空间。此外如果客户地址变更,每笔销售订单的信息也需要随之变更。而且,如果从SalesOrderHeader表移除客户的最后一笔销售订单,就有可能会遗失该客户的所有信息。
3. 不要过度使用允许Null值的列。Null值代表没有值,虽然在表中可以定义允许Null值的列,在某些特定状况中,允许Null值可能很有用,但是要谨慎使用它。因为Null值需要特殊处理,并且会增加数据操作的复杂度。当表中包含了许多允许Null值的列,并且没有存储任何数据值时,建议考虑将这些列存储到另一张表内,在连接至主表。这让主表在设计上变得简单,并且仍然可以处理存储此信息时的突发事件。
4. 避免在列中存储多值,或是有多个特性相同的列。如果要在一个列中存储多个数据,或是一行有多个特性相同的列(例如TelephoneNumber1和TelephoneNumber2),就可以考虑将重复的数据放在其他表内,并且连接会主表,举例来说,AdventureWorks数据库有一个存储产品信息的Production.Product表,一个厂商信息Purchasing.Vendor表以及一个Purchasing.ProductVendor表。第三个表只存储产品的标识符和产品厂商的标识符。此种设计可让有一个以上供货商的产品,不需要修改表的定义,也不需要为单一厂商的产品分配多余的存储空间