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)
)

フィールドを含む1つのテーブルを持つこと。次に、もう1つ追加する必要がある場合(要件の変更)、新しい列を追加する必要はありません。

ブール値をスキップして、共有主キーを持つ1つのテーブルを使用します。このような:

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

おそらく、より柔軟なアプローチは、アプリケーション内で「ロール」を定義することです。ユーザーは1つ以上の役割に関連付けられ、各役割は一連の列に関連付けられます。これらの列セットの和集合は、ユーザーが見ることができるものになります。このアプローチでは、ユーザーが表示できる列を特定するためにより多くの労力が必要になりますが、長期的にはユーザー管理が容易になります。また、データベースアクセスの観点から、ユーザー特権をそれが意味するものから分離します。

于 2012-04-10T10:08:33.053 に答える