Onl*_*ere 20 sql t-sql sql-server
我正在读一本关于EF4的书,我遇到了这个问题:

所以我想知道如何创建这个数据库,以便我可以按照本书中的示例进行操作.
如何使用简单的TSQL命令创建这些表?忘记创建数据库,想象它已经存在.
HLG*_*GEM 39
你已经获得了代码.我想分享一些关于为什么你可能希望在这样的关系中有两个表的信息.
首先,当两个表具有相同的主键并具有外键关系时,这意味着它们具有一对一的关系.那么为什么不把它们放在同一张桌子上呢?将某些信息拆分到单独的表中有几个原因.
首先,信息在概念上是分开的.如果第二个表中包含的信息与单独的特定问题有关,则可以更轻松地使用它,数据位于单独的表中.例如,在你的例子中,他们已经分离出图像,即使他们只打算每个SKU有一个记录.如果您决定需要多个图像,这使您可以灵活地在以后轻松地将表格更改为一对多关系.这也意味着当您只查询图像时,您不必实际敲击另一个(可能是更大的)表.
这让我们有理由做到这一点.您目前只有一对一的关系,但您知道未来的版本已经安排将其转换为一对多的关系.在这种情况下,设计到单独的表中更容易,因此当您移动到该结构时,您不会破坏所有代码.如果我打算这样做,我会继续创建一个代理键作为PK,并在FK上创建一个唯一的索引.这样,当您转到一对多关系时,您所要做的就是删除唯一索引并将其替换为常规索引.
分离一对一关系的另一个原因是表格是否过宽.有时您只是拥有太多关于实体的信息,以便轻松地将其放入记录可以具有的最大大小.在这种情况下,您倾向于使用最少使用的字段(或概念上适合的字段)并将它们移动到单独的表中.
将它们分开的另一个原因是,尽管您有一对一的关系,但您可能不需要记录父表中大多数记录的子表中的内容.因此,不是在父表中有很多空值,而是将其拆分出来.
其他人显示的代码假定基于字符的PK.如果在拥有自动生成的Int或GUID时需要此类关系,则只需在父表上执行自动生成.然后将该值存储在子表中,而不是在该表上生成新值.
当它说表共享相同的主键时,它只是意味着每个表中有一个具有相同名称的字段,并且都设置为主键。
CREATE TABLE [Product (Chapter 2)](
SKU varchar(50) NOT NULL,
Description varchar(50) NULL,
Price numeric(18, 2) NULL,
CONSTRAINT [PK_Product (Chapter 2)] PRIMARY KEY CLUSTERED
(
SKU ASC
)
)
CREATE TABLE [ProductWebInfo (Chapter 2)](
SKU varchar(50) NOT NULL,
ImageURL varchar(50) NULL,
CONSTRAINT [PK_ProductWebInfo (Chapter 2)] PRIMARY KEY CLUSTERED
(
SKU ASC
)
)
Run Code Online (Sandbox Code Playgroud)
ALTER TABLE [ProductWebInfo (Chapter 2)]
ADD CONSTRAINT fk_SKU
FOREIGN KEY(SKU)
REFERENCES [Product (Chapter 2)] (SKU)
Run Code Online (Sandbox Code Playgroud)
如果表名只是单个单词(也不是关键字),它可能看起来更简单,例如,如果表名只是Productand ProductWebInfo,没有(Chapter 2)附加:
ALTER TABLE ProductWebInfo
ADD CONSTRAINT fk_SKU
FOREIGN KEY(SKU)
REFERENCES Product(SKU)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
38963 次 |
| 最近记录: |