نمایش نتایج 1 تا 6 از 6

نام تاپیک: نحوه ایجاد رابطه میان FileTable ها و جداول بانک اطلاعاتی

  1. #1
    کاربر دائمی آواتار csharpcollegian
    تاریخ عضویت
    خرداد 1394
    محل زندگی
    تهران
    پست
    174

    Question نحوه ایجاد رابطه میان FileTable ها و جداول بانک اطلاعاتی

    سلام دوستان وقتتون به خیر
    سال نو رو پیشاپیش به همه عزیزان تبریک میگم
    دوستان من برای پروژه ی جدیدم تصمیم گرفتم از FileTable ها برای ذخیره ی عکس هام استفاده کنم. جستجوی زیادی توو نت کردم و با نحوه ی ایجاد و همچنین ثبت اطلاعات در FileTable ها آشنا شدم.
    فقط یک سوال برام باقی مونده و اونم نحوه ارتباط میان یک FileTable و جداول بانک اطلاعاتی هستش !؟
    چیزی که من فهمیدم اینه که باید عکسم رو در FileTable مربوطه ذخیره کنم و سپس از ستون stream_id در جدولی که عکس مربوط به اون هست استفاده کنم. خب پس باید در جدول مربوطه یک ستون ImageID ایجاد کنم و اون رو به عنوان کلید خارجی FileTable در نظر بگیرم و مقدار stream_id رو داخلش قرار بدم. اما خب مشکل اینجاست که توو مطالبی که من در رابطه با FileTable ها خوندم، نوشته که نباید هیچ تغییری در اونها ایجاد کرد و زمانی هم که سعی می کنم بین جدول اصلی و FileTable رابطه ایجاد کنم، SQL Server یه هشدار میده و سپس رابطه رو ایجاد می کنه !
    میخواستم بدونم آیا این هشدار بعدا مساله ساز نمیشه ؟ اصلا راه اصولی استفاده از FileTable ها همینطوره ؟
    ببخشید که سوالم خیلی طولانی شد
    خیلی ممنونم

  2. #2
    کاربر دائمی آواتار alireza_s_84
    تاریخ عضویت
    فروردین 1386
    محل زندگی
    اهواز
    پست
    1,191

    نقل قول: نحوه ایجاد رابطه میان FileTable ها و جداول بانک اطلاعاتی

    نقل قول نوشته شده توسط csharpcollegian مشاهده تاپیک
    سلام دوستان وقتتون به خیر
    سال نو رو پیشاپیش به همه عزیزان تبریک میگم
    دوستان من برای پروژه ی جدیدم تصمیم گرفتم از FileTable ها برای ذخیره ی عکس هام استفاده کنم. جستجوی زیادی توو نت کردم و با نحوه ی ایجاد و همچنین ثبت اطلاعات در FileTable ها آشنا شدم.
    فقط یک سوال برام باقی مونده و اونم نحوه ارتباط میان یک FileTable و جداول بانک اطلاعاتی هستش !؟
    چیزی که من فهمیدم اینه که باید عکسم رو در FileTable مربوطه ذخیره کنم و سپس از ستون stream_id در جدولی که عکس مربوط به اون هست استفاده کنم. خب پس باید در جدول مربوطه یک ستون ImageID ایجاد کنم و اون رو به عنوان کلید خارجی FileTable در نظر بگیرم و مقدار stream_id رو داخلش قرار بدم. اما خب مشکل اینجاست که توو مطالبی که من در رابطه با FileTable ها خوندم، نوشته که نباید هیچ تغییری در اونها ایجاد کرد و زمانی هم که سعی می کنم بین جدول اصلی و FileTable رابطه ایجاد کنم، SQL Server یه هشدار میده و سپس رابطه رو ایجاد می کنه !
    میخواستم بدونم آیا این هشدار بعدا مساله ساز نمیشه ؟ اصلا راه اصولی استفاده از FileTable ها همینطوره ؟
    ببخشید که سوالم خیلی طولانی شد
    خیلی ممنونم
    امکان قرار دادن رابطه روی FileTable نیست. به جای FileTable از جداول معمولی که FileStream فعال شده استفاده کنید که همون کار رو انجام میدن.
    ابتدا فایل استریم رو در سطح پایگاه داده فعال کنید. (که چون FileTable ساختین الزاما فعال شده)
    ابتدا دستورات زیر رو اجرا کنید که تابعی برای تشخیص نوع فایل به پایگاه داده اضافه بشه:
    CREATE FUNCTION [dbo].[GetFileType](@fileName nvarchar(Max)) RETURNS nvarchar(300) 
    AS
    BEGIN DECLARE @Index int;
    SET @Index = CHARINDEX('.', REVERSE(@fileName)) - 1;
    IF(@Index < 1)
    RETURN N'Unknown';
    RETURN RIGHT(@fileName, @Index)
    END

    سپس یک جدول بسازید:
    CREATE TABLE [dbo].[tbl_FileStores](    [FileStoreId] [uniqueidentifier] ROWGUIDCOL  NOT NULL DEFAULT (newsequentialid()),
    [FileData] [varbinary](max) FILESTREAM NULL,
    [FileName] [nvarchar](255) NOT NULL,
    [MimeType] [nvarchar](300) NOT NULL,
    [FileType] AS ([dbo].[GetFileType]([FileName])),
    [FileSize] AS (datalength([FileData])),
    [CreationTime] [datetime] NOT NULL DEFAULT (getdate()),
    CONSTRAINT [PK_dbo.tbl_FileStores] PRIMARY KEY CLUSTERED
    (
    [FileStoreId] ASC
    ) ON [PRIMARY] FILESTREAM_ON [db_Sajaa_DataFileGroup]
    ) ON [PRIMARY] FILESTREAM_ON [db_Sajaa_DataFileGroup]


    حالا میتونید رابطه ایجاد کنید. در واقع این جدول با جدول FileTable تفاوتی نداره و هردو از یک ساختار استفاده میکنن. منتها اینجا من ساختار دایرکتوری رو حذف کردم چون به اون نیازی نداشتم. در صورتیکه شما نیاز داشته باشی میتونی ستون مربوطه رو اضافه کنی.
    فقط به جای db_Sajaa_DataFileGroup شما باید اسم FileGroup که ساختی رو قرار بدی.

  3. #3
    کاربر دائمی آواتار csharpcollegian
    تاریخ عضویت
    خرداد 1394
    محل زندگی
    تهران
    پست
    174

    نقل قول: نحوه ایجاد رابطه میان FileTable ها و جداول بانک اطلاعاتی

    نقل قول نوشته شده توسط alireza_s_84 مشاهده تاپیک
    امکان قرار دادن رابطه روی FileTable نیست. به جای FileTable از جداول معمولی که FileStream فعال شده استفاده کنید که همون کار رو انجام میدن.
    ابتدا فایل استریم رو در سطح پایگاه داده فعال کنید. (که چون FileTable ساختین الزاما فعال شده)
    ابتدا دستورات زیر رو اجرا کنید که تابعی برای تشخیص نوع فایل به پایگاه داده اضافه بشه:
    CREATE FUNCTION [dbo].[GetFileType](@fileName nvarchar(Max)) RETURNS nvarchar(300) 
    AS
    BEGIN DECLARE @Index int;
    SET @Index = CHARINDEX('.', REVERSE(@fileName)) - 1;
    IF(@Index < 1)
    RETURN N'Unknown';
    RETURN RIGHT(@fileName, @Index)
    END

    سپس یک جدول بسازید:
    CREATE TABLE [dbo].[tbl_FileStores](    [FileStoreId] [uniqueidentifier] ROWGUIDCOL  NOT NULL DEFAULT (newsequentialid()),
    [FileData] [varbinary](max) FILESTREAM NULL,
    [FileName] [nvarchar](255) NOT NULL,
    [MimeType] [nvarchar](300) NOT NULL,
    [FileType] AS ([dbo].[GetFileType]([FileName])),
    [FileSize] AS (datalength([FileData])),
    [CreationTime] [datetime] NOT NULL DEFAULT (getdate()),
    CONSTRAINT [PK_dbo.tbl_FileStores] PRIMARY KEY CLUSTERED
    (
    [FileStoreId] ASC
    ) ON [PRIMARY] FILESTREAM_ON [db_Sajaa_DataFileGroup]
    ) ON [PRIMARY] FILESTREAM_ON [db_Sajaa_DataFileGroup]


    حالا میتونید رابطه ایجاد کنید. در واقع این جدول با جدول FileTable تفاوتی نداره و هردو از یک ساختار استفاده میکنن. منتها اینجا من ساختار دایرکتوری رو حذف کردم چون به اون نیازی نداشتم. در صورتیکه شما نیاز داشته باشی میتونی ستون مربوطه رو اضافه کنی.
    فقط به جای db_Sajaa_DataFileGroup شما باید اسم FileGroup که ساختی رو قرار بدی.
    جناب alireza_s_84 عزیز بابت پاسخ و وقتی که گذاشتین ازتون ممنونم
    ولی من میخوام طرز استفاده از FileTable ها رو بدونم. خب اگر نشه براشون رابطه تعریف کرد پس حتما یه راه جایگزینی در نظر گرفته شده دیگه.
    ممنون میشم راهنمایی بفرمایید

  4. #4
    کاربر دائمی آواتار csharpcollegian
    تاریخ عضویت
    خرداد 1394
    محل زندگی
    تهران
    پست
    174

    نقل قول: نحوه ایجاد رابطه میان FileTable ها و جداول بانک اطلاعاتی

    عزیزان کسی نحوه استفاده از FileTable ها رو بلد نیست ؟
    ممنون میشم راهنماییم کنید

  5. #5

    نقل قول: نحوه ایجاد رابطه میان FileTable ها و جداول بانک اطلاعاتی

    سلام
    بله برای برقراری ارتباط باید از نوع Stream_ID استفاده کنید.
    چون روی این فیلد یک Unique index تشکیل شده که در واقع برای هر فایل یک ID جداگانه ای اختصاص میده و نیازی نیست برید از FileStream استفاده کنید.
    مشکلی هم برای شما ایجاد نمیکنه.

  6. #6
    کاربر دائمی آواتار csharpcollegian
    تاریخ عضویت
    خرداد 1394
    محل زندگی
    تهران
    پست
    174

    نقل قول: نحوه ایجاد رابطه میان FileTable ها و جداول بانک اطلاعاتی

    نقل قول نوشته شده توسط حمیدرضاصادقیان مشاهده تاپیک
    سلام
    بله برای برقراری ارتباط باید از نوع Stream_ID استفاده کنید.
    چون روی این فیلد یک Unique index تشکیل شده که در واقع برای هر فایل یک ID جداگانه ای اختصاص میده و نیازی نیست برید از FileStream استفاده کنید.
    مشکلی هم برای شما ایجاد نمیکنه.
    سلام جناب صادقیان عزیز با تشکر از پاسختون یک سوال کوچیک دیگه هم دارم که ممنونتون میشم راهنماییم کنید.
    فرض کنیم عکس زیر جدول Product هستش و ستون ImageID هم کلید خارجی FileTable حاوی عکس هاست.


    با فرض اینکه نام FileTable مورد نظر ProductImages باشه، برای ثبت یک رکورد من در ابتدا فایل عکس رو در جدول ProductsImages ثبت می کنم و بعد به کمک کد زیر شناسه عکس ثبت شده رو برای ثبت در ستون ImageID از جدول Product استخراج می کنم :
    سوال اولم اینه که آیا اصلا سناریوی بالا اصولی هستش ؟ یا راه استاندارد دیگه ای وجود داره ؟
    و سوال دوم اینکه اگر اصولی هست، در کد بالا باید جدول رو بر اساس کدوم ستون Sort کنم (علامت سوال در عکس) تا نتیجه درستی بگیرم ؟
    ستون stream_id رو امتحان کردم جواب نداد، بر اساس ستون creation_time جواب میده اما خب سیستم خیلی آسیب پذیر میشه و با کوچکترین تغییر در ساعت سیستم، همه چی بهم میریزه !
    ببخشید اگر سوالم طولانی شد
    خیلی ممنونم

تاپیک های مشابه

  1. نحوه ایجاد فرم دینامیک برای مدیریت تمامی جداول دیتابیس
    نوشته شده توسط morteza_mokhtari در بخش ASP.NET Web Forms
    پاسخ: 3
    آخرین پست: جمعه 03 آبان 1392, 17:35 عصر
  2. نحوه ی ایجاد جداول بانک اطلاعاتی در ASP
    نوشته شده توسط pisha70 در بخش ASP.NET Web Forms
    پاسخ: 5
    آخرین پست: شنبه 28 اردیبهشت 1392, 19:27 عصر
  3. سوال: رابطه میان جدول ها در linq
    نوشته شده توسط rezarko در بخش C#‎‎
    پاسخ: 1
    آخرین پست: چهارشنبه 23 اسفند 1391, 12:44 عصر
  4. سوال: نحوه چینش و رنگ ستون ها و جداول
    نوشته شده توسط نیما اکبری در بخش ASP.NET Web Forms
    پاسخ: 0
    آخرین پست: سه شنبه 14 شهریور 1391, 10:43 صبح
  5. نحوه ایجاد رابطه یک به یک
    نوشته شده توسط amin1000 در بخش SQL Server
    پاسخ: 1
    آخرین پست: سه شنبه 25 خرداد 1389, 17:06 عصر

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •