我想实现一个role的表设计,不知道怎么设计好点,本人数据库不熟悉.
role表格由一下4个表格中因素组成. 比如用每个表的field1.
那么role表中的一个记录就有可能是[t1.field1(大于/小于/不等于/....)f11_v1] (关系 and /or ) [t2.field2(大于/小于/不等于/....)f22_v1]
(关系 and /or )
[t3.field1(大于/小于/不等于/....)f31_v1] (关系 and /or ) [t4.field1(not in )[f41_v1.....f41_v4]]就是说大家有没有什么好的role关系表设计 提供一个哦.table1  t1
field1   field2
f11_v1  f12_v1 
f11_v2  f12_v2 
f11_v3  f12_v3 
f11_v4  f12_v4 table2  t2
field1   field2
f21_v1  f22_v1 
f21_v2  f22_v2 
f21_v3  f22_v3 
f21_v4  f22_v4 
table3  t3
field1   field2
f31_v1  f32_v1 
f31_v2  f32_v2 
f31_v3  f32_v3 
f31_v4  f32_v4 
table4  t4
field1   field2
f41_v1  f42_v1 
f41_v2  f42_v2 
f41_v3  f42_v3 
f41_v4  f42_v4 
    

解决方案 »

  1.   

    你的意思你的ROLE表是综合以下4个表里的记录得到的,字段之间又存在着包含关系。。可是你的数据是如何存储进去的,为什么会有这样的需求?
    你的应用需求是如何的?
      

  2.   

    恩, 没表达清楚吧.  
    这么说吧,  
    t1 中存放农副产品名称
    t1 名称 价格
      大蒜 10
      生姜 10
      辣椒 10
      大米 10
      鱼 10
    t2产地
      湖南
      山西
      安徽t3 中间商类型   
      代理商 20%
      超市 30%我要设计一个规则表让用户自己制定盈余规则,
    比如说 1.从湖南进的鱼通过代理商必须加价20%才能赢利. 山西进的辣椒通过超市买加价低于30%就亏了.
    2 从安徽进的大米和生姜通过超市如果加价30% 就会赢利 20%就是规则表从其他几个表中取元素,然后加上条件(大于 等于 小于), 条件之间是and /or等,生成一个新的记录存在我的规则表中, 以后我就根据规则对进货地点,产品,价格进行利润盈余计算.
      

  3.   

    t1 t2 t3 t4都是独立的表, 分别自己存储的,
    我现在要生成一个规则表, 就像举例的, 用户可以自己定义一定的规则存入这个规则表中, 以后我就去根绝规则表的规则查询, 满足某种条件了,这个生意就能做,赚前的, 满足另外一组组合条件就是亏钱的, 或者另外一个条件就是赢利持平,不亏不赚的.可能我之前的描述不太清楚,数据库设计的程序做的不太多哦.谢谢了啊.
      

  4.   

    看到这样一个设计,
    CREATE table roles
    (
    id INT identity primary key,
    funcid int,--外键,表示一个功能
    serialno int,--序号
    TableName VARCHAR(100),--这个功能包含的表
    ColumnName VARCHAR(100),--列名
    COlumnType VARCHAR(20),--列类型
    operator VARCHAR(20),--运算符 =><inlike not in not like ....
    initialvalue VARCHAR(50),--比较的值
    logical VARCHAR(50),--逻辑关系 and or
    isactive int,--是否启用
    ExternalExpresion VARCHAR(200) --直接编写语法替换上面的语法
    )我看到了一个考勤软件中这么样设计的,不知道他怎么样用的
    --统计项目表
    Create Table LeaveClass1(
      LeaveId INT Identity(999,1) not null primary key, --999-公出
      LeaveName VARCHAR(20) not null,
      MinUnit float not null default 1,
      Unit smallint not null default 0,
      RemaindProc smallint not null default 2,
      RemaindCount smallint not null default 1,
      ReportSymbol varchar(4) not null default '_',
      Deduct float not null default 0,
      LeaveType SMALLINT not null default 0, --bit0-是否统计项;bit1-是否异常情况项;
      Color int not null default 0,
      Classify SMALLINT not null default 0, --计算类别,bit0-按班次时段分类;bit1-按节假日分类
      Calc text null) --计算单位
    ;insert into LeaveClass1(LeaveName, MinUnit, Unit, RemaindProc,
      RemaindCount, ReportSymbol, LeaveType, Calc)
      values('公出', 0.5, 3, 1, 1, 'G', 3, 'if(AttItem(LeaveType1)=999,AttItem(LeaveTime1),0)+if(AttItem(LeaveType2)=999,AttItem(LeaveTime2),0)+if(AttItem(LeaveType3)=999,AttItem(LeaveTime3),0)+if(AttItem(LeaveType4)=999,AttItem(LeaveTime4),0)+if(AttItem(LeaveType5)=999,AttItem(LeaveTime5),0)');规则'公出',当满足Calc条件时候ReportSymbol'G',这个规则就是用户自己定义的.