1

ある会社は、特定の分野で支援するために別の会社に雇われています。

そこで、次のテーブルを作成しました。会社:id、会社名、会社アドレス管理者:(会社に関連して)id、company_id、ユーザー名、電子メール、パスワード、フルネーム

次に、各企業には何人かの労働者がいます。私は労働者に関するデータを保存します。したがって、労働者は職業、署名された契約タイプ、および他のいくつかの一般的なものを持っています。

これで、ワーカーの親テーブルとその中のデータ(契約タイプ、職業、その他の一般的なもの)は、各企業で同じになります。

会社ごとに1つの新しいデータベースを作成する必要がありますか?または、すべてのデータを同じデータベースに保存しますか?

ありがとう。

4

2 に答える 2

4

「契約タイプ」、「職業」は会社ごとに同じになるので、「ID」、「タイプ」などの列を持つ「AgreementTypes」のようなルックアップテーブルを作成し、「Workers」の「ID」列を参照することをお勧めします。 " テーブル。新しいデータベースは必要ないと思います。リレーショナルデータベースは、データの冗長性を排除し、エンティティ間に適切な関係を作成するために使用されます。

1つの会社に1つのデータベースがあると想像すると、各データベースの「Company」テーブルに1つのレコードが含まれることになります。「管理者」と「作業者」は、その単一のレコードに関連付けられています。また、「AgreementTypes」などの他の一般的なエンティティは他のテーブルにあります。

したがって、契約タイプに追加/変更がある場合、すべてのデータベースでそれを行うことは困難です。同様に、「Company」エンティティにリンクする新しいエンティティがある場合は、これらのエンティティが1つのアプリケーションに属しているという仮定に基づいて、すべてのデータベースを再検討する必要があります。

于 2012-12-18T23:14:11.153 に答える
3

次のような構造の単一のデータベースが必要です(これはやや単純化されていますが、アイデアは得られます)。

Companies
    CompanyID PK
    CompanyName
    CompanyAddress
    OtherCompanySpecificData

Workers
    WorkerID PK
    CompanyID FK
    LastName
    FirstName
    DOB
    AgreementTypeID FK
    ProfessionID FK
    UserID FK - A worker may need more than one user account
    Other UserSpecificData

Professions
    ProfessionID PK
    Profession
    OtherProfessionStuff

AgreementType
    AgreementTypeID PK
    AgreementTypeName
    Description
    OtherAgreementStuff

Users
    UserID PK -- A Worker may need more than 1 user account
    WorkerID FK
    UserName
    Password
    AccountStatus

Groups
    GroupID PK
    GroupName
    OtherGroupSpecificData

UserGroups --Composite Key with UserID and GroupID
    UserID PK 
    GroupID PK

明らかに、物事はもう少し複雑になります、そして私はあなたの要件やビジネスモデルを知りません。たとえば、会社が異なる部門を持つことができる場合は、CompanyDepartmentテーブルを作成してから、さまざまな部門に従業員を割り当てることができます。

等々。

データ構造をよりアトミックに作成できるほど、データベースの拡張に伴う柔軟性が高まります。Googleの用語はデータベースの正規化であり、具体的にはデータベースの第3正規形(3NF)です(効率的なデータベース設計のための最小値と見なされます)。

お役に立てば幸いです。行き詰まっている場合は、遠慮なく詳しく説明してください。SOには多くの大きな助けがあります。

于 2012-12-19T02:38:08.263 に答える