سؤال

لا تحتاج إلى تخزين عدة قيم التاريخ في حقل قاعدة البيانات.هذه القيم سوف تكون مرتبطة إلى "المستخدم" مثل كل مستخدم سوف تمتلك مجموعة فريدة من نوعها من هذه عدة قيم التاريخ.

يمكنني استخدام واحدة لكثير العلاقة هنا ولكن كل مستخدم سوف يكون بالضبط 4 تاريخ القيم مرتبطة بها لذلك أشعر بأن واحدة من الجدول أن يكون مبالغة (في العديد من الطرق مثلالسرعة) ولكن إذا كنت بحاجة إلى الاستعلام ضدهم أحتاج تلك 4 قيم في مختلف المجالات مثلMyDate1 MyDate2 ...الخ.ولكن ثم أمر SQL لجلب بها يجب أن تحقق 4 القيم في كل مرة.

حتى أن العديد من علاقة ربما يكون أفضل حل ، ولكن هل هناك أفضل/نظافة/أسرع/مهما طريق آخر ؟ أنا تصميم ذلك بشكل صحيح ؟

منصة MS SQL 2005 ولكن الحل على أي منصة سوف أفعل أنا في الغالب تبحث عن المناسبة db تصميم التقنيات.

تحرير: 4 حقول تمثل 4 حالات من الشيء نفسه.

هل كانت مفيدة؟

المحلول

إذا كنت تفعل ذلك في أربع حقول منفصلة ، ثم لم يكن لديك للانضمام.حفظ استعلام جملة من فظيع جدا ، يمكن أن تكتب:

SELECT * FROM MyTable WHERE 'DateLiteral' IN (MyDate1, MyDate2, MyDate3, MyDate4);

كما ذكر في التعليقات ، في مشغل محددة جدا عندما يتعلق الأمر إلى حقول التاريخ (وصولا إلى آخر (ملي)الثانية).يمكنك دائما استخدام التاريخ والوقت وظائف في الاستعلام الفرعي ، ولكن بين غير قابل للاستخدام:

SELECT * FROM MyTable WHERE date_trunc('hour', 'DateLiteral') 
IN (date_trunc('hour', MyDate1), date_trunc('hour', MyDate2), date_trunc('hour', MyDate3), date_trunc('hour', MyDate4));

نصائح أخرى

بعض قواعد البيانات مثل فايربيرد لديك مجموعة نوع البيانات الذي يفعل بالضبط ما وصفته أنت.ومن أعلن شيئا من هذا القبيل:

alter table t1 add MyDate[4] date;

ما يستحق ، تطبيع التصميم سيكون لتخزين التمور كما في صفوف تعتمد على الجدول.

تخزين قيم متعددة في عمود واحد ليس تطبيع التصميم ؛ التطبيع صراحة يعني كل عمود بالضبط قيمة واحدة.

يمكنك التأكد لا أكثر من أربعة صفوف يتم إدراج تعتمد هذه الطريقة:

 CREATE TABLE ThisManyDates (n INT PRIMARY KEY);
 INSERT INTO ThisManyDates VALUES (1), (2), (3), (4);

 CREATE TABLE UserDates (
   User_ID INT REFERENCES Users,
   n INT REFERENCES ThisManyDates,
   Date_Value DATE NOT NULL,
   PRIMARY KEY (User_ID, n)
 );

إلا أن هذا التصميم لا يسمح لك جعل قيم التاريخ إلزامية.

ماذا عن وجود 4 حقول إرفاق هوية المستخدم (إذا كنت على يقين من أنه لن يتجاوز ذلك)?

إنشاء أربعة حقول التاريخ و تخزين التمور في الحقول.تاريخ الحقول قد تكون جزءا من الجدول المستخدم ، أو أنها قد تكون في بعض الجدول الآخر انضم إلى الجدول المستخدم في واحدة من العلاقة.إنه قرارك.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top