Thật tuyệt khi bạn dành thời gian để hiểu, phân loại và mô hình hóa dữ liệu bạn đang xử lý, từ kinh nghiệm cá nhân của tôi, tất cả điều này làm cho toàn bộ quá trình phát triển dễ dàng hơn và rất linh hoạt cho những thay đổi trong tương lai. Và tôi khá chắc chắn rằng bạn cũng nhận thức được điều này rồi.
Mô hình dữ liệu sơ bộ và quy tắc kinh doanh giả định
Tôi đã xác định một danh sách các quy tắc kinh doanh mà tôi đã thừa nhận sau khi đọc câu hỏi của bạn và kiểm tra chặt chẽ sơ đồ của bạn, để mô tả sự thiếu hiểu biết của tôi về thông số kỹ thuật của bạn. Sau khi xác định danh sách đó, tôi đã lấy mô hình dữ liệu IDEF1X [1] mà tôi quyết định tải lên dưới dạng tài liệu .PDF trong một nền tảng bên ngoài (Dropbox), do định dạng của mô hình dữ liệu này không phù hợp với hình ảnh nhúng. Hai công cụ này sẽ hữu ích khi tham khảo cho một số điểm quan trọng mà tôi liệt kê dưới đây trong phần có tiêu đề Các khía cạnh để giải quyết để tiếp tục tiến về phía trước .
Đầu tiên, đây là trò chơi
Vì chỉ có vậy, sơ bộ, hãy coi nó như một phương tiện giúp chúng tôi hoàn thành mô hình dữ liệu cuối cùng mong muốn.
Quy tắc kinh doanh giả định
Mô hình dữ liệu sơ bộ cho biết được lấy từ một tập hợp các quy tắc kinh doanh (được suy ra từ câu hỏi của bạn) mà tôi sẽ liệt kê như sau:
Tổ chức và hồ sơ
Lưu ý rằng Profile
hiện được hiểu là một từ đồng nghĩa cho Person
.
- An
Organization
là bạn của nhiều người Profiles
.
- An
Organization
là bạn của nhiều người Organizations
.
- An
Organization
là thành viên của một-nhiều Organizations
.
- A
Profile
là thành viên của một-nhiềuOrganizations
.
- A
Profile
là bạn của nhiều người Profiles
.
- A
Profile
là thành viên của một-nhiều Profiles
.
Địa điểm và địa chỉ
- An
Organization
sở hữu một-nhiều Locations
.
- A
Location
được phân loại theo một-nhiều LocationTypes
( chỉ một tại một thời điểm nhất định).
- Một
Location
có thể có một-nhiều Addresses
( một Physical
, một cho Shipping
, một cho Billing
, hoặc một trong đó phục vụ mục đích tất cả nói, hoặc một kết hợp hai mục đích và khác phục vụ duy nhất một trong số họ).
An Address
có thể được giữ bởi một-nhiều Profiles
hoặc, nói cách khác, Profile
giữ một-nhiều Addresses
.
Một cụ Address
có thể được sử dụng bởi một-nhiều Profiles
(phục vụ như Physical
cho một Profile
, được sử dụng cho Billing
bởi một chương trình khác , vv). Vì vậy, một Address
công trình theo cách tương tự cho Locations
và Profiles
.
- Do đó, một cá nhân
Address
có thể, cùng một lúc , thuộc loại Physical
, Shipping
và Billing
.
Vị trí và vai trò
- A
Location
mở một-nhiều Roles
.
- A
Role
có thể được thực hiện trong một-nhiều Locations
.
- Một
Profile
(một khi nó đã được đặt là Member
một Organization
) có thể thực hiện một-nhiều Roles
, trong một-nhiều Locations
(nhưng chỉ một cụ thể Role
trong mỗi Location
tại một thời điểm cụ thể, nghĩa là không bao giờ hai hoặc nhiều hơn Roles
cùng một lúc ).
Các khía cạnh để giải quyết để tiếp tục tiến về phía trước
Để tiếp tục cải thiện độ phân giải của mô hình dữ liệu của bạn, đây là danh sách các điểm có liên quan mà một khi chúng tôi giải quyết chúng sẽ giúp chúng tôi đạt được mục tiêu này:
Tôi đã giả định rằng thuật ngữ Profile
trong ngữ cảnh của bạn có nghĩa tương tự (hoặc giống nhau) với nghĩa của Person
nó, nhưng nó có thể hơi khác một chút. Theo cách này, bạn có nói rằng, trong kịch bản của bạn, các thực thể Organization
và Person
là kiểu con của Profile
?
Một Profile
(hoặc Person
) có thể sở hữu một-nhiều EmailAddresses
, hoặc một Profile
(hoặc Person
) cố định với chính xác một EmailAddress
?
Bạn có muốn cung cấp khả năng cho một Organization
liên hệ thông qua Telephone
và Email
, hoặc bạn muốn hạn chế điều đó chỉ có thể cho một Profile
(hoặc Person
)?
Tôi giả sử rằng a Location
được cố định chính xác với một Address
trong các loại Physical
, điều này có đúng không?
Có thể Location
chia sẻ cho một người với nhiều người khác nhau Organizations
hay không, nếu không, chỉ Location
có thể được sở hữu bởi một người Organization
?
Bạn đã tuyên bố thông qua ý kiến rằng thực tế là một Member
và một Friend
là như nhau. Như bạn có thể thấy trong mô hình dữ liệu sơ bộ được đề xuất của mình, tôi đã theo dõi các thông số kỹ thuật ban đầu của bạn và mô tả tất cả các kết hợp thành viên và tình bạn có thể giữa Organization
và Profile
(hoặc Person
) trong các thực thể khác nhau vì tôi nghĩ rằng nó có thể hữu ích trong nỗ lực xác định tốt nhất có thể cấu trúc cho phần đó của kịch bản của bạn. Trong trường hợp này:
- Tôi giả sử rằng câu lệnh
an Organization is a Member of another Organization
có tác dụng khác với câu lệnh a Profile (or Person) is a Member of an Organization
liên quan đến thực thể được gọi Location
.
- Như bạn có thể thấy trong các mô hình dữ liệu, tôi nghĩ rằng
Role
các Owner
chỉ áp dụng cho một Organization
và, với tôi, sự hợp lệ Roles
cho một Profile
(hoặc Person
), bên trong một Location
là Admin
và Member
. Bạn nghĩ gì về tất cả những điều này? Vì bạn đang tiếp xúc trực tiếp với các quy tắc kinh doanh áp dụng cho tình huống của bạn, bạn cần cho tôi biết nếu các giả định của tôi là đúng.
Một Profile
(hoặc Person
) chơi khác nhau Roles
trong cùng một Location
? tức là, một cái Person
có thể, cùng một lúc, Admin
và cũng là một Member
cái giống nhau Location
không? Các quy tắc trong vấn đề này là gì?
Tôi nghĩ rằng cùng Profile
(hoặc Person
) có thể chơi khác nhau Roles
trong khác nhau Locations
. Ví dụ: Một Profile
(hoặc Person
) cụ thể là một Admin Admin trong trò chơi Location
1, và cùng một Profile
(hoặc Person
) là một Member
Trò chơi trong trò chơi Location
2 lần, cùng một lúc. Tôi có đúng không
Có thể một cụ thể Location
có sự khác biệt LocationTypes
cùng một lúc, hoặc một cá nhân được Location
cố định để giữ chính xác một LocationType
?
Có phải thuộc tính Organization.Website
đại diện cho địa chỉ trang web của một tổ chức cụ thể, chẳng hạn như là dba.stackexchange.com không?
Nếu một trong những thứ Profile
1 (được hiểu là Person
) là một Member
(hoặc Friend
) của Profile
1 2, thì có thể để Profile
1 1 1 thực hiện Role
trong một Location
sở hữu bởi một 2 sở hữu Profile
không? Tôi nghĩ rằng các kịch bản như vậy chỉ có giá trị cho các mối quan hệ giữa một Organization
và Member
Person
vì vậy, bạn nghĩ gì?
Theo cách tương tự, nếu Lọ Organization
1 1 là một Member
(hoặc Friend
) của Organization
Giv 2, thì có thể để Organization
1 1 1 thực hiện một Role
cách Location
thuộc sở hữu của một Organization
2 2 không? Một lần nữa, tôi nghĩ rằng loại kịch bản này chỉ có giá trị cho các mối quan hệ giữa một Organization
và một Member
Person
, điều này có đúng không?
Về vấn đề này, trong khi tôi đang viết câu hỏi này, tôi nghĩ rằng sẽ hợp lý khi nói rằng chỉ có ba loại mối quan hệ khác nhau liên quan Organizations
và Persons
, và chúng ta có thể định nghĩa:
- (a) Mối quan hệ giữa một
Organization
và Person
như là tôn phạm Membership
.
- (b) Mối quan hệ giữa a
Person
và một người khác khác nhau Person
như Quy phạm Friendhip
.
- (c) Chúng tôi vẫn chưa tìm thấy một tên có ý nghĩa để mô tả mối quan hệ giữa một cá nhân
Organization
và một người khác Organization
.
- Vì vậy, hãy cho tôi biết những gì bạn nghĩ về (a), (b) và (c).
Có thể Organization
một Friend
(hoặc a Member
) của một-nhiều- khác nhau Organizations
cùng một lúc không? Hoặc chỉ có thể là Organization
chỉ có một mối quan hệ với độc quyền khác nhauOrganization?
Mô hình dữ liệu kế tiếp mô tả bước tiến đầu tiên
Để ý các câu trả lời và giải quyết của bạn đối với các khía cạnh đang chờ xử lý mà tôi đã liệt kê ở trên, tôi đã tạo ra các bản sau
Mặc dù tôi không cảm thấy khá thoải mái với nó, nhưng mô hình dữ liệu mới này thể hiện các quy tắc kinh doanh sau:
- Một
Profile
là một trong hai một Organization
hoặc một Person
. [2]
- A
Profile
có thể là bạn của một người với nhiều người FriendProfiles
, và Profile
có thể là bạn chấp nhận của một người với nhiều người FriendProfiles
. [3]
- A
Location
có thể bao gồm một-nhiều Locations
. [4]
Câu trả lời cho ý kiến cụ thể tiếp theo của bạn
Nó thực sự thú vị đối với tôi khi lưu ý / gộp các mối quan tâm [ví dụ: LocationAddress và ProfileAddress] - vì rõ ràng tôi muốn lao vào và giữ tất cả chúng mà không có mối quan hệ chính xác [vui thay, nó không cảm thấy đúng với ERD ban đầu của tôi].
Vâng, đó là một so sánh tốt, mặc dù tôi sẽ không gọi đó là sự tách biệt các mối quan tâm (chắc chắn là nguyên tắc cơ bản trong lập trình và thiết kế ứng dụng), vì thuật ngữ này thường liên quan đến giai đoạn phát triển ứng dụng và chúng tôi hiện đang tìm thấy chính mình trong giai đoạn hiểu dữ liệu và thiết kế cấu trúc logic của nó.
Từ kinh nghiệm cá nhân của tôi, tôi cho rằng giai đoạn này có liên quan đến việc đưa những điều quan trọng vào toàn bộ bối cảnh của họ, nó phải làm với việc nhìn thấy các mối liên hệ tồn tại giữa các thực thể khác nhau có liên quan trong kịch bản quan tâm cụ thể, và sau đó mô tả những điều này trong một mô hình dữ liệu. Trong trường hợp cụ thể mà bạn đang bình luận, Address
thực thể có thể có các loại kết nối khác nhau với các thực thể khác, một với Profile
và một khác với Location
.
Và, vâng, khi một cái gì đó không cảm thấy đúng hoặc tự nhiên , đó cũng có thể là một dấu hiệu cho thấy một người cần phải nỗ lực nhiều hơn để hiểu được dữ liệu thích hợp. Theo cách này, Address
thực thể là một trong những điều mà tôi cho rằng cần được chú ý nhiều hơn, vì tôi nghĩ rằng mối quan hệ giữa a Profile
và an Address
có thể được xử lý bằng phương tiện của Location
thực thể (do thực tế là mọi người Location
phải có ít nhất một vật lý Address
), do đó chúng tôi có thể loại bỏ ProfileAddress
thực thể liên kết được mô tả trong mô hình mới nhất, nhưng bạn nên tiếp tục phân tích những điểm này và cho tôi biết ý tưởng của bạn.
Ngoài ra, có phải thông lệ trong IDEF1X là thay đổi các từ chối PK / FK trong các thực thể để dễ đọc hơn [ví dụ: ProfileId - LocationOwnerProfileId]?
Vâng, đó là một nhận xét rất thông minh từ bạn, vì IDEF1X khuyên bạn nên sử dụng tên vai trò để định danh TỪ KHÓA NGOẠI TỆ, để nắm bắt ý nghĩa của các thuộc tính đó theo thực thể mà nó đang được sử dụng. Cũng cần lưu ý rằng điều này cũng liên quan mạnh mẽ đến khái niệm di chuyển khóa chính . Như một vấn đề thực tế, việc sử dụng tên vai trò có trước IDEF1X, do nó ban đầu được trình bày bởi Tiến sĩ EF Codd trong văn bản bán kết năm 1970 của ông. Theo cách này, người ta có thể thấy rõ độ trung thực mà tiêu chuẩn IDEF1X giữ cho mô hình quan hệ .
Tôi có muốn tìm hiểu những gì bạn không đặc biệt thích / cảm thấy nó không phải là mô hình, với / trong giải pháp không?
Bên cạnh các chi tiết đã được mô tả ở trên về Address
thực thể, tôi không chắc liệu các Roles
thực hiện được đưa ra Profile
trong một cụ thể Location
có tương đương với một Organization
hoặc một Person
. Từ quan điểm của tôi, Person
trước tiên cần phải được liên kết với một Organization
, và sau đó điều này Organization
sẽ chỉ định nói Person
để thực hiện một Role
cách cụ thể Location
, nhưng bạn biết kịch bản tốt hơn, vì vậy quy tắc này có thể là không cần thiết. Về vấn đề này, tôi sẽ nhấn mạnh về thực tế là nó sẽ rất hữu ích cho tôi để biết mô tả theo ngữ cảnh hoặc ý nghĩa rằng những người sử dụng trong tương lai điều này tạo cấu trúc dữ liệu để Organization
, Profile
vàLocation
, nhưng tôi hiểu rằng đây có thể được coi là thông tin bí mật, vì vậy đây sẽ là một hạn chế.
Với cấu trúc hiện tại, có vẻ như mọi người ( Organization
hoặc Person
) có thể liên quan đến bất kỳ ai (một lần nữa, Organization
hoặc Person
) và có thể / làm bất cứ điều gì ( Role
) ở bất cứ đâu ( Location
), nhưng, chia sẻ, đây là điều mà bạn và người dùng đang mong đợi từ cơ sở dữ liệu này , trong đó bạn sẽ cung cấp các ràng buộc được xác định rõ, tất nhiên. Nếu đây là trường hợp, thì chúng tôi gần như cung cấp một giải pháp cuối cùng. Vì, một cách tự nhiên, ý kiến của bạn là quyết định trong tình huống này, bạn cũng nên phân tích ý tưởng này và sau đó cho tôi biết kết luận của bạn để chúng tôi có thể thực hiện các bước cuối cùng.
Thứ hai khả thi
Thật không may, sự hài hước đã dừng lại vài tuần trước, tôi đoán vì những cam kết công việc mà bạn phải đáp ứng, điều này là hoàn toàn hợp lý. Tôi sẽ có nhiều nội dung hơn nếu chúng tôi đã phát triển một mô hình ổn định và mạnh mẽ hơn, nhưng do các tương tác trước đây của chúng tôi, tôi có thể cho rằng tôi đã có thể chỉ cho bạn đi đúng hướng.
Ngoài những gì đã được trình bày trong quy trình trả lời câu hỏi này, tôi cho rằng việc cung cấp một tiến trình mới từ các mô hình dữ liệu trước đó có thể hữu ích cho những người tìm kiếm khác có vấn đề tương tự. Vì vậy, tôi đã tạo ra các bản vá
Mô hình dữ liệu sơ bộ của tổ chức và hồ sơ - Thứ hai
Như có thể thấy trong mô hình dữ liệu như vậy, tôi đã loại bỏ mối quan hệ nhiều-nhiều mà tôi đã mô tả trong các mô hình trước đó giữa Profile
và Address
, vì một cái đã cho Profile
đã liên quan đến một-nhiều Addresses
thông qua sở hữu của nó Locations
.
Một thay đổi khác được minh họa trong tiến bộ mới này là thực tế là bây giờ nó bao gồm khả năng một cái đã cho Location
có thể được sở hữu bởi nhiều người Profiles
. Do đó, tôi đã thay đổi Location
PRIMARY KEY (bằng cách gạt bỏ những LocationOwnerProfileId
thuộc tính) và sau đó thêm vào một thực thể kết hợp ( nhiều-nhiều ) có liên quan Profile
với Location
.
Ghi chú
1. IDEF1X là một kỹ thuật mô hình hóa dữ liệu rất được khuyến khích , được định nghĩa là một tiêu chuẩn vào tháng 12 năm 1993 bởi Viện Tiêu chuẩn và Công nghệ Quốc gia Hoa Kỳ ( NIST ).
2. Đây là một ocurrence của một cụm (siêu) kiểu phụ . Trong trường hợp bạn quan tâm, đây là một câu trả lời trong đó tôi giải quyết một cách chi tiết hơn với loại mối quan hệ này.
3. Một ví dụ về mối quan hệ phân cấp nhiều-nhiều , và rất giống với cấu trúc đã đưa ra giải pháp dứt khoát cho Vấn đề Khám phá Bộ phận của Hồi . Tất nhiên, giải pháp như vậy được Tiến sĩ Edgar Frank Codd giới thiệu trong bài báo có ảnh hưởng rất lớn của ông 1970 Một mô hình dữ liệu quan hệ cho các ngân hàng dữ liệu chia sẻ lớn .
4. Như vậy, đây là một ví dụ của mối quan hệ phân cấp một-nhiều (hoặc nhiều-một) .