0

我有一个包含一些列的表

CREATE TABLE test (
testid INT,
field1 CHAR(10),
field2 VARCHAR(50),    
field3 DATETIME,    
field4 MEDIUMINT
[...]
);

现在我希望能够在我的应用程序中进行设置,允许我为特定用户启用或禁用其中的一些设置。

CREATE TABLE user (
userid INT
);

我在想:

CREATE TABLE user_test_visible (
userid INT,
field1 BOOL,
field2 BOOL,
field3 BOOL,
field4 BOOL
[...]
);

我也在考虑这样的事情:

CREATE TABLE user_test_visible (
userid INT,
field_name VARCHAR(30),
visible BOOL);

这些方法中的任何一种都是明智的吗?

4

2 回答 2

1

我建议也许做这样的事情。

CREATE TABLE test 
(
    fieldId INT,
    field CHAR(10)
)

拥有一个包含字段的表。然后,如果您需要再添加一个(更改要求),则不必添加新列。

我会跳过布尔值并使用一个具有共享主键的表。像这样:

CREATE TABLE user_test_visible (
    userid INT,
    fieldId INT
);

我建议跳过布尔值的原因是,如果没有行,请显示该字段。这取决于您的起始值是多少。如果您希望用户从一开始就看到所有字段,那么您可以考虑使用这样的表格:

CREATE TABLE user_test_not_visible (
    userid INT,
    fieldId INT
);

然后在该表中有一行的地方不显示该字段。

编辑

使用插入字段时,您必须有一些预部署脚本吗?您还可以在此处指定哪些列可见,哪些不可见。如果您有不同的数据类型,那么 ether 具有您所拥有的布局,或者您可以只是一个 sql_variant。但是,例如 linq-to-sql 不支持这种类型的列作为主键。

那只是我的想法。希望能帮助到你

于 2012-04-10T10:23:11.110 回答
0

也许更灵活的方法是在您的应用程序中定义“角色”。一个用户将与一个或多个角色相关联,并且每个角色将与一组列相关联。这些列集的联合将是用户可以看到的。这种方法需要更多的精力来确定用户可以看到哪些列,但从长远来看,它会使用户管理更容易。它还将用户权限与数据库访问的含义分开。

于 2012-04-10T10:08:33.053 回答