sql-server – 保持此架构的最佳方法是什么?

前端之家收集整理的这篇文章主要介绍了sql-server – 保持此架构的最佳方法是什么?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
目前,我正在处理一个RFID项目,其中每个标签都附加到一个对象上.一个对象可以是一个人,一个电脑,一个铅笔,一个盒子,或者是我老板心中的一切.
当然每个对象都有不同的属性.

所以我试图有一个表标签,我可以在系统中注册每个标签(注册标签).还有另一个表,我可以将标签与对象联系起来,并描述一些其他属性,这是一个已经做的. (没有真正的模式只是一个简化的版本)

突然间,我意识到这个模式可能在各个表中有相同的标签.
例如,标签123可以同时在C和B中.这是不可能的,因为每个标签只能附加到单个对象.

为了简单起见,我希望每个标签数据库中不能出现多次.

我目前的做法

我真正想要什么

更新:
是的,TagID是由最终用户选择的.此外,TagID由Tag Reader提供,TagID是128位数.

更新:
到目前为止的对象是:

– 药品(TagID,comercial_name,generic_name,amount,…)

– 机器(TagID,名称,说明,型号,制造商,…)

– 患者(TagID,名字,姓氏,生日,…)

所有的属性(列或任何你命名的)是非常不同的.

更新后更新

我正在为一个医院工作的RFID标签.每个RFID标签都附着在一个对象上,以便保持观察,不幸的是每个对象都有很多不同的属性.

物体可以是人,机器或药物,也可以是具有其他属性的新物体.

所以,我只是想要一个灵活的切割器模式.这允许我引入新的对象的类型,并且让我轻松地添加新的属性到一个对象.请记住,这个系统可能非常大.

例子:

Tag(TagID)
Medicine(generic_name,expiration_date,dose,price,laboratory,...)
Machine(model,name,description,buy_date,...)
Patient(PatientID,first_name,last_name,birthday,...)

我们必须只为一个对象提供一个标签.

注意:我真的不说话(或者也写)真的很抱歉.不是这里的母语

解决方法

您可以使用关系约束强制执行这些规则.查看使用持久化列来强制约束标签:{铅笔或计算机}.该模型为您提供了模拟每个子表(Person,Machine,Pencil等)的极大灵活性,同时可以防止标记之间的任何冲突.还好,我们不必通过检查约束来诉诸触发器或udfs来强制执行关系.该关系被内置到模型中.
create table dbo.TagType (TagTypeID int primary key,TagTypeName varchar(10));
insert into dbo.TagType
    values(1,'Computer'),(2,'Pencil');

create table dbo.Tag
(   TagId       int primary key,TagTypeId   int references TagType(TagTypeId),TagName     varchar(10),TagDate     datetime,constraint UX_Tag unique (TagId,TagTypeId)
)
go
create table dbo.Computer 
(   TagId       int primary key,TagTypeID   as 1 persisted,cpuType     varchar(25),cpuSpeed    varchar(25),foreign key (TagId,TagTypeID) references Tag(TagId,TagTypeID)
)
go
create table dbo.Pencil 
(   TagId       int primary key,TagTypeId   as 2 persisted,isSharp     bit,Color       varchar(25),TagTypeId)
)
go



-----------------------------------------------------------
-- create a new tag of type Pencil:
-----------------------------------------------------------
insert into dbo.Tag(TagId,TagTypeId,TagName,TagDate)
    values(1,2,'Tag1',getdate());

insert into dbo.Pencil(TagId,isSharp,Color)
    values(1,1,'Yellow');

-----------------------------------------------------------
-- try to make it a Computer too (fails FK)
-----------------------------------------------------------
insert into dbo.Computer(TagId,cpuType,cpuSpeed)
    values(1,'Intel','2.66ghz')

猜你在找的MsSQL相关文章