2009-10-09 34 views

Trả lời

3
  • Nếu bạn luôn đo và lưu trữ tất cả các thông số trong một phiên đo lường, hãy chuyển đến thiết kế 1.

    Di chuyển các thuộc tính vào các bảng riêng biệt chỉ có ý nghĩa nếu các thuộc tính hiếm khi được lưu trữ và/hoặc hiếm khi cần thiết.

  • Nếu bạn có cảm biến riêng biệt cho vị trí và nhiệt độ, hãy chuyển đến thiết kế 3. Điều này là có thể xảy ra nhất, vì vị trí được đo bằng bộ theo dõi GPS và nhiệt độ và mức dầu được đo bằng cảm biến của xe, là các thiết bị riêng biệt và các phép đo được thực hiện tại các thời điểm riêng biệt.

    Bạn thậm chí có thể cần phải thêm một bảng riêng biệt cho mỗi cảm biến (ví dụ: nếu các cảm biến khác nhau đo nhiệt độ và khí tại các thời điểm khác nhau, thì hãy tạo hai bảng cho chúng).

  • Moving liquid vào một bảng riêng (như trong thiết kế 2) có ý nghĩa nếu danh sách các chất lỏng bạn sử dụng không được biết đến trong thời gian thiết kế (ví dụ một số chất lỏng thứ ba, như hydro hay heli-3 hay bất cứ điều gì họ sẽ phát minh ra sẽ được sử dụng bởi các phương tiện và bạn sẽ cần phải theo dõi nó mà không cần thiết kế lại cơ sở dữ liệu).

    Đây không phải là kịch bản có khả năng, tất nhiên.

+0

Cảm ơn rất nhiều câu trả lời và cân nhắc của bạn. Một số khái niệm rõ ràng hơn cho tôi bây giờ. – Nick

1

nếu bạn đọc từ cảm biến cùng lúc thiết kế thứ hai trông giống như thiết bị quá mức với tôi. Nó sẽ có ý nghĩa để giữ thông tin riêng biệt chỉ khi bạn đọc thông tin đó vào những thời điểm khác nhau.

Tôi sẽ đề xuất thiết kế đầu tiên.

+0

Cảm ơn bạn rất nhiều vì câu trả lời của bạn. – Nick

0

ứng dụng của bạn cần để đối phó với hai loại điều

  • Cảm biến = loại, nơi mà trong động cơ, và thậm chí cả các thông số như tần số điểm bỏ phiếu và như vậy ..
  • Đọc = các bản ghi được đóng dấu thời gian riêng lẻ từ một (hoặc vài) cảm biến.

Có một vài điều cần suy nghĩ về:
- Làm thế nào chúng ta có thể tìm cách trừu tượng hóa các khái niệm cảm biến? Ý tưởng là sau đó chúng tôi có thể xác định và xử lý các trường hợp cảm biến thông qua các thuộc tính của chúng, thay vì phải biết chúng được tìm thấy ở đâu trong cơ sở dữ liệu.
-Đó là cách tốt nhất để giữ tất cả các số đo cho dấu thời gian cụ thể trong một bản ghi "Đọc" hoặc có một bản ghi trên mỗi cảm biến, cho mỗi lần đọc, ngay cả khi có một số phép đo.

Câu trả lời nhanh cho câu hỏi cuối cùng là sự kiện đọc một lần cho mỗi bản ghi có vẻ linh hoạt hơn; chúng ta sẽ có thể xử lý, theo cùng một cách thức, cả hai nhóm phép đo được thăm dò một cách có hệ thống cùng một lúc, và các phép đo khác không đồng nhất với cái cũ. Ngay cả khi ngay bây giờ, tất cả các phép đo cùng một lúc, tiềm năng để dễ dàng bổ sung cảm biến mà không thay đổi lược đồ cơ sở dữ liệu để xử lý chúng theo kiểu thời trang.

Có lẽ việc thiết kế sau đây sẽ được gần gũi hơn với những gì bạn cần:

 
tblSensors 
    SensorId PK 
    Name  clear text description of the sensor ("Oil Temp.") 
    LongName longer description ("Oil Temperarure, Sensor TH-B14 in crankshaft") 
    SensorType enumeration ("TEMP", "PRESSURE", "VELOCITY"...) 
    SensorSubType enumeration ("OIL", "AIR"...) 
    Location enumeration ("ENGINE", "GENERAL", "EXHAUST"...) 
    OtherCrit other crietrias which may be used to identify/seach for the sensor. 


tblReads 
    Readid PK 
    DateTime 
    SensorId FK to tblSensors 
    Measurment INTeger value 
    Measurement2 optional extra meassurement (maybe to handle say, all 
        of a GPS sensor read as one "value" 
    Measurement3 ... also may have multiple columns for different types of 
       variables (real-valued ?) 

Ngoài việc trên, bạn muốn có một vài bảng nơi "enumerations" cho các loại cảm biến được xác định, và sự gắn kết với logic ứng dụng sẽ là bằng cách sử dụng "các khóa" giống như trong các liệt kê này. ví dụ.

SELECT S.Name, R.DateTime, R.Measurement 
FROM tblReads R 
JOIN tblSensors S ON S.SensorId = R.SensorID 
WHERE S.SensorType IN ('Temp', 'Pres') 
    AND S.Location = "ENG" 
    AND R.DateTime > '04/07/2009' 
ORDER BY R.DateTime 

Điều này sẽ không ngăn bạn gọi các cảm biến theo id của chúng và đọc nhóm trên cùng một dòng kết quả. ví dụ.

SELECT R1.DateTime, R1.Measurement AS OilTemp, R2.Measurement AS OilPress, 
     R3.Measurement AS MotorRpms 
FROM tblReads R1 
LEFT OUTER JOIN tblReads R2 ON R1.DateTime = R2.DateTime 
LEFT OUTER JOIN tblReads R3 ON R1.DateTime = R3.DateTime 
WHERE R1.SensorId = 17 
    AND R2.SensorId = 11 
    AND R3.SensorId = 44 
    AND R1.DateTime > '04/07/2009' AND R1.DateTime < '04/08/2009' 
ORDER BY R3.Measurement DESC -- Sorte by Speed, fastest first 
Các vấn đề liên quan