SQL Server,LINQ到SQL,表示容器类中的多个组件
这个问题分为两部分: A)我的设计错了吗?如果是这样,正确的方法是什么 B)如果我的设计是正确的,我如何实现它 我有一个数据类,它由一个组件类的多个实例组成。类结构的抽象如下: 在本例中,容器中只有两个组件,但实际上我有更多。同样重要的是要指出,SQL Server,LINQ到SQL,表示容器类中的多个组件,sql,sql-server,database,linq-to-sql,database-design,Sql,Sql Server,Database,Linq To Sql,Database Design,这个问题分为两部分: A)我的设计错了吗?如果是这样,正确的方法是什么 B)如果我的设计是正确的,我如何实现它 我有一个数据类,它由一个组件类的多个实例组成。类结构的抽象如下: 在本例中,容器中只有两个组件,但实际上我有更多。同样重要的是要指出,容器关心的是哪个组件是哪个-它们不仅仅是一个列表,它们对容器有各自的名称和意义 我在MS SQL Server 2008中实现了以下结构来存储此数据: CREATE TABLE Containers ( ID int IDENTITY(1,1) N
容器
关心的是哪个组件
是哪个-它们不仅仅是一个列表,它们对容器
有各自的名称和意义
我在MS SQL Server 2008中实现了以下结构来存储此数据:
CREATE TABLE Containers (
ID int IDENTITY(1,1) NOT NULL,
ComponentA int NULL,
ComponentB int NULL,
CONSTRAINT PK_Containers PRIMARY KEY (ID));
CREATE TABLE Components (
ID int IDENTITY(1,1) NOT NULL,
Foo nchar(10) NOT NULL,
Bar nchar(10) NOT NULL,
CONSTRAINT PK_Components PRIMARY KEY (ID));
ALTER TABLE Containers
ADD CONSTRAINT FK_ComponentA
FOREIGN KEY (ComponentA)
REFERENCES Components(ID);
ALTER TABLE Containers
ADD CONSTRAINT FK_ComponentB
FOREIGN KEY (ComponentB)
REFERENCES Components(ID);
这已经有一些缺点:
- 在我的模型中,组件是唯一的,并且只能属于一个容器上的一个属性。在DB中,我必须手动执行此操作
- 删除容器时,它引用的组件也应删除。我必须在DB中手动执行此操作(使用触发器)
组件
实例拥有容器
类型集。
正确地说,每个容器
都有两个组件
引用但是,组件
实例仍然有两个容器
引用,而我的模型要求它们只有一个引用。
如何在SQL Server中实现我的类设计或如何说服LINQ to SQL按照我预期的方式解释我的数据库?容器有许多组件,但需要按名称引用它们。您需要从容器到组件的关系表(在伪sql中): 要回答这个问题: 在我的模型中,组件是唯一的,并且只能属于一个容器上的一个属性。在DB中,我必须手动执行此操作 只需在
ContainerComponents
中为ContainerID
和ComponentID
创建一个唯一的约束即可
还有这个:
删除容器时,它引用的组件也应删除。我必须在DB中手动执行此操作(使用触发器)
使用从
Container
到ContainerComponents
到Component
如何将从ContainerComponents
到Component
的删除级联到Component
,因为Component
是该外键关系中的父表?@Harikawashi:是的,我认为你做不到。也许你可以用一个扳机。
create table ContainerComponents (
ContainerID int FK references Container(ID),
ComponentID int FK references Component(ID),
Name string,
-- optional - to give the relationship a meaning
Type int FK references RelationshipType(ID)
)