目前,我正在处理一个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')