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 Profilehiện được hiểu là một từ đồng nghĩa cho Person.
- An
Organizationlà bạn của nhiều người Profiles .
- An
Organizationlà bạn của nhiều người Organizations .
- An
Organizationlà thành viên của một-nhiều Organizations .
- A
Profilelà thành viên của một-nhiềuOrganizations .
- A
Profilelà bạn của nhiều người Profiles .
- A
Profilelà thành viên của một-nhiều Profiles .
Địa điểm và địa chỉ
- An
Organizationsở 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
Locationcó 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 Addresscó thể được giữ bởi một-nhiều Profiles hoặc, nói cách khác, Profilegiữ một-nhiều Addresses .
Một cụ Addresscó thể được sử dụng bởi một-nhiều Profiles (phục vụ như Physicalcho một Profile , được sử dụng cho Billingbởi một chương trình khác , vv). Vì vậy, một Addresscông trình theo cách tương tự cho Locationsvà Profiles.
- Do đó, một cá nhân
Addresscó thể, cùng một lúc , thuộc loại Physical, Shipping và Billing .
Vị trí và vai trò
- A
Locationmở một-nhiều Roles .
- A
Rolecó thể được thực hiện trong một-nhiều Locations .
- Một
Profile(một khi nó đã được đặt là Membermộ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ể Roletrong mỗi Locationtạ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ữ Profiletrong ngữ cảnh của bạn có nghĩa tương tự (hoặc giống nhau) với nghĩa của Personnó, 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ể Organizationvà Personlà 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 Organizationliên hệ thông qua Telephonevà 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ể Locationchia sẻ cho một người với nhiều người khác nhau Organizations hay không, nếu không, chỉ Locationcó 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 Membervà một Friendlà 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 Organizationvà 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 Organizationcó tác dụng khác với câu lệnh a Profile (or Person) is a Member of an Organizationliê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
Rolecác Ownerchỉ áp dụng cho một Organizationvà, với tôi, sự hợp lệ Rolescho một Profile(hoặc Person), bên trong một Locationlà Adminvà 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 Rolestrong cùng một Location? tức là, một cái Personcó thể, cùng một lúc, Adminvà cũng là một Membercái giống nhau Locationkhô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 Rolestrong khác nhau Locations. Ví dụ: Một Profile(hoặc Person) cụ thể là một Admin Admin trong trò chơi Location1, và cùng một Profile(hoặc Person) là một MemberTrò chơi trong trò chơi Location2 lần, cùng một lúc. Tôi có đúng không
Có thể một cụ thể Locationcó sự khác biệt LocationTypescùng một lúc, hoặc một cá nhân được Locationcố đị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ứ Profile1 (được hiểu là Person) là một Member(hoặc Friend) của Profile1 2, thì có thể để Profile1 1 1 thực hiện Roletrong một Locationsở hữu bởi một 2 sở hữu Profilekhô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 Organizationvà Member Personvì vậy, bạn nghĩ gì?
Theo cách tương tự, nếu Lọ Organization1 1 là một Member(hoặc Friend) của OrganizationGiv 2, thì có thể để Organization1 1 1 thực hiện một Rolecách Locationthuộc sở hữu của một Organization2 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 Organizationvà 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 Organizationsvà Persons, và chúng ta có thể định nghĩa:
- (a) Mối quan hệ giữa một
Organizationvà Personnhư là tôn phạm Membership.
- (b) Mối quan hệ giữa a
Personvà một người khác khác nhau Personnhư 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
Organizationvà 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ể Organizationmột Friend(hoặc a Member) của một-nhiều- khác nhau Organizationscùng một lúc không? Hoặc chỉ có thể là Organizationchỉ 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
Profilelà một trong hai một Organization hoặc một Person. [2]
- A
Profilecó thể là bạn của một người với nhiều người FriendProfiles , và Profilecó thể là bạn chấp nhận của một người với nhiều người FriendProfiles . [3]
- A
Locationcó 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, Addressthự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 Profilevà 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, Addressthự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 Profilevà an Address có thể được xử lý bằng phương tiện của Locationthực thể (do thực tế là mọi người Locationphải có ít nhất một vật lý Address), do đó chúng tôi có thể loại bỏ ProfileAddressthự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ề Addressthực thể, tôi không chắc liệu các Rolesthực hiện được đưa ra Profiletrong một cụ thể Locationcó tương đương với một Organizationhoặc một Person. Từ quan điểm của tôi, Persontrước tiên cần phải được liên kết với một Organization, và sau đó điều này Organizationsẽ chỉ định nói Personđể thực hiện một Rolecá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, Profilevà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 ( Organizationhoặc Person) có thể liên quan đến bất kỳ ai (một lần nữa, Organizationhoặ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 Profilevà 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 Locationcó thể được sở hữu bởi nhiều người Profiles . Do đó, tôi đã thay đổi LocationPRIMARY KEY (bằng cách gạt bỏ những LocationOwnerProfileIdthuộ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 Profilevớ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) .